package com.icehand.wechat.code;

import com.icehand.common.code.CodeEnum;
import lombok.Getter;

/**
 * @author icehand
 */
@Getter
public enum WechatErrorCode implements CodeEnum<Integer> {
    /**
     *
     */
    SERVER_ERROR(-1, "系统繁忙，此时请开发者稍候再试"),
    SUCCESS(0, "请求成功"),
    GET_ACCESS_TOKEN_FAIL(40001, "获取 access_token 时 AppSecret 错误，或者 access_token 无效。请开发者认真比对 AppSecret 的正确性，或查看是否正在为恰当的公众号调用接口"),
    ACCESS_TOKEN_ERROR(40002, "不合法的凭证类型"),
    OPEN_ID_ERROR(40003, "不合法的 OpenID ，请开发者确认 OpenID （该用户）是否已关注公众号，或是否是其他公众号的 OpenID"),
    MEDIA_TYPE_ERROR(40004, "不合法的媒体文件类型"),
    FILE_TYPE_ERROR(40005, "不合法的文件类型"),
    FILE_SIZE_ERROR(40006, "不合法的文件大小"),
    FILE_ID_ERROR(40007, "不合法的媒体文件 id"),
    MESSAGE_TYPE_ERROR(40008, "不合法的消息类型"),
    IMAGE_SIZE_ERROR(40009, "不合法的图片文件大小"),
    AUDIO_SIZE_ERROR(40010, "不合法的语音文件大小"),
    VIDEO_SIZE_ERROR(40011, "不合法的视频文件大小"),
    IMAGE_ZIP_SIZE_ERROR(40012, "不合法的缩略图文件大小"),
    APP_ID_ERROR(40013, "不合法的 AppID ，请开发者检查 AppID 的正确性，避免异常字符，注意大小写"),
    ACCESS_TOKEN_EXPIRE(40014, "不合法的 access_token ，请开发者认真比对 access_token 的有效性（如是否过期），或查看是否正在为恰当的公众号调用接口"),
    MENU_TYPE_ERROR(40015, "不合法的菜单类型"),
    BUTTON_QTY_ERROR(40016, "不合法的按钮个数"),
    BUTTON_QTY_ERROR_2(40017, "不合法的按钮个数"),
    BUTTON_NAME_SIZE_ERROR(40018, "不合法的按钮名字长度"),
    BUTTON_KEY_ERROR(40019, "不合法的按钮 KEY 长度"),
    BUTTON_URL_ERROR(40020, "不合法的按钮 URL 长度"),
    MENU_VERSION_ERROR(40021, "不合法的菜单版本号"),
    MENU_LEAF_SIZE_ERROR(40022, "不合法的子菜单级数"),
    CHILD_BUTTON_QTY_ERROR(40023, "不合法的子菜单按钮个数"),
    CHILD_BUTTON_TYPE_ERROR(40024, "不合法的子菜单按钮类型"),
    CHILD_BUTTON_NAME_SIZE_ERROR(40025, "不合法的子菜单按钮名字长度"),
    CHILD_BUTTON_KEY_SIZE_ERROR(40026, "不合法的子菜单按钮 KEY 长度"),
    CHILD_BUTTON_URL_SIZE_ERROR(40027, "不合法的子菜单按钮 URL 长度"),
    BUTTON_USER_ERROR(40028, "不合法的自定义菜单使用用户"),
    OAUTH_CODE_ERROR(40029, "不合法的 oauth_code"),
    REFRESH_TOKEN_ERROR(40030, "不合法的 refresh_token"),
    OPEN_ID_LIST_ERROR(40031, "不合法的 openid 列表"),
    OPEN_ID_LIST_SIZE_ERROR(40032, "不合法的 openid 列表长度"),
    WORD_FORMAT_ERROR(40033, "不合法的请求字符，不能包含 \\uxxxx 格式的字符"),
    PARAM_ERROR(40035, "不合法的参数"),
    REQUEST_FORMAT_ERROR(40038, "不合法的请求格式"),
    URL_SIZE_ERROR(40039, "不合法的 URL 长度"),
    GROUP_ID_ERROR(40050, "不合法的分组 id"),
    GROUP_NAME_ERROR(40051, "分组名字不合法"),
    ARTICLE_IDX_ERROR(40060, "删除单篇图文时，指定的 article_idx 不合法"),
    GROUP_NAME_ERROR_2(40117, "分组名字不合法"),
    MEDIA_ID_SIZE_ERROR(40118, "media_id 大小不合法"),
    BUTTON_TYPE_ERROR(40119, "button 类型错误"),
    BUTTON_TYPE_ERROR_2(40120, "button 类型错误"),
    MEDIA_ID_TYPE_ERROR(40121, "不合法的 media_id 类型"),
    WECHAT_CODE_ERROR(40132, "微信号不合法"),
    IMG_FORMAT_ERROR(40137, "不支持的图片格式"),
    NOT_ADD_PUBLIC_ACCOUNT(40155, "请勿添加其他公众号的主页链接"),
    ACCESS_TOKEN_LACK(41001, "缺少 access_token 参数"),
    APP_ID_LACK(41002, "缺少 appid 参数"),
    REFRESH_TOKEN_LACK(41003, "缺少 refresh_token 参数"),
    SECRET_LACK(41004, "缺少 secret 参数"),
    MEDIA_FILE_LACK(41005, "缺少多媒体文件数据"),
    MEDIA_ID_LACK(41006, "缺少 media_id 参数"),
    CHILD_MEAN_LACK(41007, "缺少子菜单数据"),
    OAUTH_CODE_LACK(41008, "缺少 oauth code"),
    OPEN_ID_LACK(41009, "缺少 openid"),
    ACCESS_TOKEN_TIME_OUT(42001, "access_token 超时，请检查 access_token 的有效期，请参考基础支持 - 获取 access_token 中，对 access_token 的详细机制说明"),
    REFRESH_TOKEN_TIME_OUT(42002, "refresh_token 超时"),
    OAUTH_CODE_TIME_OUT(42003, "oauth_code 超时"),
    TOKEN_INVALID(42007, "用户修改微信密码， accesstoken 和 refreshtoken 失效，需要重新授权"),
    GET_ONLY(43001, "需要 GET 请求"),
    POST_ONLY(43002, "需要 POST 请求"),
    HTTPS_ONLY(43003, "需要 HTTPS 请求"),
    RECEIVER_FOLLOW(43004, "需要接收者关注"),
    FRIEND_RELATIONSHIP(43005, "需要好友关系"),
    RECEIVER_BLACK_LIST(43019, "需要将接收者从黑名单中移除"),
    MEDIA_FILE_EMPTY(44001, "多媒体文件为空"),
    POST_BODY_EMPTY(44002, "POST 的数据包为空"),
    MESSAGE_EMPTY(44003, "图文消息内容为空"),
    MESSAGE_EMPTY_2(44004, "文本消息内容为空"),
    MEDIA_FILE_SIZE_ERROR(45001, "多媒体文件大小超过限制"),
    MESSAGE_CONTENT_ERROR(45002, "消息内容超过限制"),
    TITLE_SIZE_ERROR(45003, "标题字段超过限制"),
    DESCRIBE_SIZE_ERROR(45004, "描述字段超过限制"),
    LINK_SIZE_ERROR(45005, "链接字段超过限制"),
    LINK_SIZE_ERROR_2(45006, "图片链接字段超过限制"),
    AUDIO_SIZE_ERROR_2(45007, "语音播放时间超过限制"),
    MESSAGE_LIMIT(45008, "图文消息超过限制"),
    API_LIMIT_2(45009, "接口调用超过限制"),
    MENU_QTY_LIMIT(45010, "创建菜单个数超过限制"),
    API_LIMIT(45011, "API 调用太频繁，请稍候再试"),
    REPLY_TIME_OUT(45015, "回复时间超过限制"),
    SYSTEM_GROUP_NOT_MODIFY(45016, "系统分组，不允许修改"),
    GROUP_NAME_TOO_LENGTH(45017, "分组名字过长"),
    GROUP_QTY_LIMIT(45018, "分组数量超过上限"),
    KF_DOWN_LIMIT(45047, "客服接口下行条数超过上限"),
    MEDIA_DATA_NOT_EXIST(46001, "不存在媒体数据"),
    MENU_VERSION_NOT_EXIST(46002, "不存在的菜单版本"),
    MENU_NOT_EXIST(46003, "不存在的菜单数据"),
    USER_NOT_EXIST(46004, "不存在的用户"),
    PARSE_ERROR(47001, "解析 JSON/XML 内容错误"),
    API_NOT_AUTH(48001, "api 功能未授权，请确认公众号已获得该接口，可以在公众平台官网 - 开发者中心页中查看接口权限"),
    USER_REJECT(48002, "粉丝拒收消息（粉丝在公众号选项中，关闭了 “ 接收消息 ” ）"),
    API_BOUND(48004, "api 接口被封禁，请登录 mp.weixin.qq.com 查看详情"),
    API_DENY(48005, "api 禁止删除被自动回复和自定义菜单引用的素材"),
    API_LIMIT_3(48006, "api 禁止清零调用次数，因为清零次数达到上限"),
    MESSAGE_PERMISSION_LIMIT(48008, "没有该类型消息的发送权限"),
    USER_NOT_AUTH_API(50001, "用户未授权该 api"),
    USER_BAOUND(50002, "用户受限，可能是违规后接口被封禁"),
    INVALID_PARAMETER(61451, "参数错误 (invalid parameter)"),
    INVALID_KF_ACCOUNT(61452, "无效客服账号 (invalid kf_account)"),
    KF_ACCOUNT_EXISTED(61453, "客服帐号已存在 (kf_account exsited)"),
    INVALID_KF_ACCOUNT_LENGTH(61454, "客服帐号名长度超过限制 ( 仅允许 10 个英文字符，不包括 @ 及 @ 后的公众号的微信号 )(invalid kf_acount length)"),
    ILLEGAL_CHARACTER_KF_ACCOUNT(61455, "客服帐号名包含非法字符 ( 仅允许英文 + 数字 )(illegal character in kf_account)"),
    KF_ACCOUNT_COUNT_EXCEEDED(61456, "客服帐号个数超过限制 (10 个客服账号 )(kf_account count exceeded)"),
    INVALID_FILE_TYPE(61457, "无效头像文件类型 (invalid file type)"),
    SYSTEM_ERROR(61450, "系统错误 (system error)"),
    DATE_FORMAT_ERROR(61500, "日期格式错误"),
    MENU_ID_NOT_EXIST(65301, "不存在此 menuid 对应的个性化菜单"),
    NOT_FOUND_USER(65302, "没有相应的用户"),
    DEFAULT_MENU_NOT_FOUND(65303, "没有默认菜单，不能创建个性化菜单"),
    MATCH_RULE_EMPTY(65304, "MatchRule 信息为空"),
    DEFINE_MENU_LIMIT(65305, "个性化菜单数量受限"),
    NOT_SUPPORT_DEFINE_MENU_ACCOUNT(65306, "不支持个性化菜单的帐号"),
    DEFINE_MENU_EMPTY(65307, "个性化菜单信息为空"),
    BUTTON_NOT_FOUND(65308, "包含没有响应类型的 button"),
    DEFINE_MENU_CLOSE(65309, "个性化菜单开关处于关闭状态"),
    COUNTRY_EMPTY(65310, "填写了省份或城市信息，国家信息不能为空"),
    PROVINCE_EMPTY(65311, "填写了城市信息，省份信息不能为空"),
    INVALID_COUNTRY(65312, "不合法的国家信息"),
    INVALID_PROVINCE(65313, "不合法的省份信息"),
    INVALID_CITY(65314, "不合法的城市信息"),
    DOMAIN_MAX(65316, "该公众号的菜单设置了过多的域名外跳（最多跳转到 3 个域名的链接）"),
    INVALID_URL(65317, "不合法的 URL"),
    POST_PARAMETER_INVALID(9001001, "POST 数据参数不合法"),
    REMOTE_SERVICE(9001002, "远端服务不可用"),
    TICKET_INVALID(9001003, "Ticket 不合法"),
    GET_USER_FAIL(9001004, "获取摇周边用户信息失败"),
    GET_MERCHANT_INFO_FAIL(9001005, "获取商户信息失败"),
    GET_OPEN_ID_FAIL(9001006, "获取 openid 失败"),
    UPLOAD_FILE_LACK(9001007, "上传文件缺失"),
    UPLOAD_FILE_TYPE_INVALID(9001008, "上传素材的文件类型不合法"),
    UPLOAD_FILE_SIZE_INVALID(9001009, "上传素材的文件尺寸不合法"),
    UPLOAD_FAIL(9001010, "上传失败"),
    ACCOUNT_INVALID(9001020, "帐号不合法"),
    EXIST_DEVICE_LOW(9001021, "已有设备激活率低于 50% ，不能新增设备"),
    DEVICE_APPLY_INVALID(9001022, "设备申请数不合法，必须为大于 0 的数字"),
    DEVICE_ID_EXISTED(9001023, "已存在审核中的设备 ID 申请"),
    DEVICE_ID_MAX_50(9001024, "一次查询设备 ID 数量不能超过 50"),
    DEVICE_ID_INVALID(9001025, "设备 ID 不合法"),
    PAGE_ID_INVALID(9001026, "页面 ID 不合法"),
    PAGE_PARAMETER_INVALID(9001027, "页面参数不合法"),
    DELETE_PAGE_ID_MAX_SIZE_10(9001028, "一次删除页面 ID 数量不能超过 10"),
    PAGE_HAD_DEVICE(9001029, "页面已应用在设备中，请先解除应用关系再删除"),
    QUERY_SIZE_MAX_50(9001030, "一次查询页面 ID 数量不能超过 50"),
    TIME_ZONE_ERORR(9001031, "时间区间不合法"),
    DEVICE_PAGE_BIND_ERROR(9001032, "保存设备与页面的绑定关系参数错误"),
    MERCHANT_ID_ERROR(9001033, "门店 ID 不合法"),
    DEVICE_REMARK_INFO_TOO_LONG(9001034, "设备备注信息过长"),
    DEVICE_APPLY_PARAM_ERROR(9001035, "设备申请参数不合法"),
    QUERY_BEGIN_ERROR(9001036, "查询起始值 begin 不合法"),

    ;

    private Integer code;
    private String msg;
    WechatErrorCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public static WechatErrorCode choice(Integer code) {
        for(WechatErrorCode wechatErrorCode : values()){
            if(wechatErrorCode.getCode().equals(code)){
                return wechatErrorCode;
            }
        }
        return SUCCESS;
    }
}
